[Alexa] ask-cliを使用してスキルのクローンを作成してみました
1 はじめに
Alexa Skill Kit Command-line Interface(以下、ASK-CLI)を使用すると、スキルの雛形作成から、デプロイ(スキル及びLambdaの両方)を極めて簡単に行うことができます。
下記は、それを試してみた記事です。
今回は、ASK-CLIのコマンドの一つであるcloneを使って、デプロイされたスキルのクローンを作成して、スキルの更新を試してみました。
最初にお断りで恐縮ですが、私の間違いかも知れませんが、cloneコマンドでLambdaのダウンロードに失敗してしまったので、一部手動で作業しております。
2 試験のためのデプロイ
最初に、雛形スキルをそのままデプロイします。
1. 2017/10/04現在、バージョンは、ベータ1となっています。
$ ask --version 1.0.0-beta.1
2. スキル名(test-skill)とプロファイル名(furuya02)を指定して、スキルを作成します。
$ ask new -n test-skill -p furuya02 New project for Alexa skill created.
3. デプロイします。
$ cd test-skill $ ask deploy -p furuya02 -------------------- Create Skill Project -------------------- Profile for the deployment: [furuya02] Skill Id: amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b Skill deployment finished. Model deployment finished. Lambda deployment finished.
4. 作成されたスキルです。
5. 作成されたラムダです。
6. テストから動作が確認できます。
デフォルトでは、Welcomeメッセージが、「Hello World!」となっている事を確認できます。この後、このメッセージを変更することで、編集の確認をしてみたいと思います。
3 ローカルの環境削除
それでは、ローカルの環境を消し去ります。
$ ls -la test-skill total 8 drwxr-xr-x 6 sin staff 204 10 4 18:37 . drwxr-xr-x 11 sin staff 374 10 4 18:33 .. drwxr-xr-x 3 sin staff 102 10 4 18:34 .ask drwxr-xr-x 3 sin staff 102 10 4 18:33 lambda drwxr-xr-x 3 sin staff 102 10 4 18:33 models -rw-r--r-- 1 sin staff 762 10 4 18:33 skill.json $ rm -rf test-skill $ ls -la test-skill ls: test-skill: No such file or directory
4 クローンの作成
1. cloneコマンドを実行します。
$ ask clone -p furuya02 ? List of all your skills. test-skill: [amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b] -------------------- Clone Skill Project -------------------- Project directory for test-skill created at ./test-skill Skill schema for test-skill created at ./test-skill/skill.json Skill model for en-US created at ./test-skill/models/en-US.json Downloading Lambda functions... Get Lambda function error. CredentialsError: Missing credentials in config
しかし、ここで、Get Lambda function error. CredentialsError: Missing credentials in configというエラーが発生しています。
2.クローンの内容を確認します。
フォルダが生成され、スキルのモデルがコピーされています。
$ cd test-skill $ ls -la total 8 drwxr-xr-x 6 sin staff 204 10 4 18:50 . drwxr-xr-x 11 sin staff 374 10 4 18:50 .. drwxr-xr-x 3 sin staff 102 10 4 18:50 .ask drwxr-xr-x 3 sin staff 102 10 4 18:50 lambda drwxr-xr-x 3 sin staff 102 10 4 18:50 models -rw-r--r-- 1 sin staff 820 10 4 18:50 skill.json
しかし、Lambdaは、エラーのとおり空っぽでした。
$ ls -la lambda/custom/ total 0 drwxr-xr-x 2 sin staff 68 10 4 18:50 . drwxr-xr-x 3 sin staff 102 10 4 18:50 ..
5 エラー対処
エラーでLambdaのダウンロードに失敗したので、その対処を行います。 上記エラーが発生しなければ、このセクションの作業は、おそらく必要ないと思います。
1.lambdaコマンドでダウンロード。
lambdaが配置されるディレクトリに移動して、lambdaコマンドで直接Lambdaをダウンロードします。
$ cd lambda/custom/ $ ask lambda download --function arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02 -p furuya02 arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02 download finished. $ ls -la total 16 drwxr-xr-x 5 sin staff 170 10 4 19:02 . drwxr-xr-x 3 sin staff 102 10 4 18:50 .. -rw-rw-rw- 1 sin staff 1773 10 4 19:02 index.js drwxr-xr-x 21 sin staff 714 10 4 19:02 node_modules -rw-rw-rw- 1 sin staff 244 10 4 19:02 package.json
2. skill.jsonの編集
Lambdaがリンクしていないと認識されてしまったので、skill.jsonのapisの所が、外部のAPIに接続されているかのようになっています。
"apis": { "custom": { "endpoint": { "uri": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02" } } },
これを、ローカルのLambdaのコードに関連つけるために、下記のように変更します。
"apis": { "custom": { "endpoint": { "sourceDir": "lambda/custom" } } },
3. .ask/configの編集
.ask/configの方にも編集が必要です。
{ "deploy_settings": { "furuya02": { "skill_id": "amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b", "was_cloned": true } } }
margeを追加します。(endpointにスキル名を指定する)
{ "deploy_settings": { "furuya02": { "skill_id": "amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b", "was_cloned": true, "merge": { "skillManifest": { "apis": { "custom": { "endpoint": { "uri": "ask-custom-test-skill-furuya02" } } } } } } } }
6 動作確認
1. メッセージを「Hello World!」から「good morning!」に変更してみます。
index.jsのメッセージのみを修正してみます。
'SayHello': function () { this.response.speak('good morning!') .cardRenderer('hello world', 'hello world'); this.emit(':responseReady'); },
2. デプロイします
初回だけ、確認のメッセージが出ますが、Yesを選択すると、2回目以降は、表示されません。
$ ask deploy -p furuya02 ? Do you want to proceed with the above deployments? Yes -------------------- Update Skill Project -------------------- Skill Id: amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b Skill deployment finished. Model deployment finished. Lambda deployment finished.
3. テストで確認してみます
メッセージが変わっていることを確認できます。
7 最後に
今回は、ASK-CLIのcloneコマンドで、デプロイされたスキル及び、Lambdaのコピーから、内容を修正する作業を試してみました。 ASK-CLIは、まだベータですが、非常に強力なツールだと思います。
順次、他のコマンドも試してみたいと思います。
8 参考リンク
Skill Events in Alexa Skills
Add Events to Your Skill with SMAPI
List Events in Alexa Skills
Steps to Create a List Skill